import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { fileURLToPath, URL } from "node:url";
import path from "node:path";
import Icons from "unplugin-icons/vite";
import IconsResolver from "unplugin-icons/resolver";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";

const pathSrc = path.resolve(__dirname, "src");
console.log(pathSrc);

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      // Auto import functions from Vue, e.g. ref, reactive, toRef...
      // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
      imports: ["vue", "vue-router", "pinia"],
      // 需要自动导入.vue组件的文件目录
      // dirs: [path.resolve(pathSrc, "")],
      // dirs: [path.resolve(pathSrc, "/**")]// 这样会报错,
      dirs: ["src/**"],
      // Auto import functions from Element Plus, e.g. ElMessage, ElMessageBox... (with style)
      // 自动导入 Element Plus 相关函数，如：ElMessage, ElMessageBox... (带样式)
      resolvers: [
        ElementPlusResolver(),
        // Auto import icon components
        // 自动导入图标组件
        IconsResolver({
          prefix: "Icon",
        }),
      ],
      dts: path.resolve(pathSrc, "typings", "auto-imports.d.ts"),
    }),

    Components({
      /*
    Components里边的配置详见 unplugin-vue-components的githhub的README
    // https://github.com/unplugin/unplugin-vue-components?tab=readme-ov-file#configuration
    */
      // "./src/**/*.{vue,js}" 是一种类似于通配符的语法
      // 使用 '**' 就可以递归地匹配src下面的每一层子目录
      // * 表示匹配任意数量的字符
      // "./src/**/" 就是递归地匹配任意一层目录
      /*
      // relative paths to the directory to search for components.
      // 要搜索组件的目录的相对路径。
      dirs: ['src/components'],
      // valid file extensions for components.
      // 组件的有效文件扩展名
      extensions: ['vue'],
      // Glob patterns to match file names to be detected as components.
      // When specified, the `dirs` and `extensions` options will be ignored.
      // Glob模式，以匹配要检测为组件的文件名。
      //指定时，将忽略“目录”和“扩展名”选项。
      globs: ['src/components/*.{vue}'],
    */
      // 配置自动导入的文件夹 // 可以自动导入这里的所有.vue组件
      // 这里不配置，也可以自动导入默认'src/components'里的.vue组件
      // dirs: ['src/components'],
      dirs: ["src/**"],
      resolvers: [
        // Auto register icon components
        // 自动注册图标组件
        IconsResolver({
          enabledCollections: ["ep"],
        }),
        // Auto register Element Plus components
        // 自动导入 Element Plus 组件
        ElementPlusResolver(),
      ],
      dts: path.resolve(pathSrc, "typings", "components.d.ts"),
    }),
    Icons({
      autoInstall: true,
    }),
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
});
